package educar.controllers;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;

import educar.gui.AdministradorView;
import educar.models.Alumno;
import educar.models.Docente;
import educar.models.User;
import educar.models.docenteNotFound;
import educar.models.userNotFound;

public class UserController implements ActionListener {
  private AdministradorView view;
  String nombreUsuario;
  String passwordUsuario;
  String dni;
  String role;
  String dniModificar;
  int dniEntero;
		
  public UserController(AdministradorView view) {
    this.view=view;
  }

  public void actionPerformed(ActionEvent evento){
    if(evento.getActionCommand().equals("Crear")) {
      nombreUsuario="";
	  passwordUsuario="";
	  dni="";
	  role="";
	  nombreUsuario=view.getUserNameUsuario();
	  passwordUsuario=view.getPasswordUsuario();
	  dni=view.getDNIUsuario();
	  role=view.getRolUsuario();
	  try {
		dniEntero=Integer.parseInt(dni.trim());
	  }
	  catch (Exception e){
	    JOptionPane.showMessageDialog(null, "Dni incorrecto");
		view.resetCamposUsuario();}
	    if(nombreUsuario.equals("")||passwordUsuario.equals("")||(dni.equals("")))
		  JOptionPane.showMessageDialog(null, "Error en el ingreso de datos");
		else
		   if(!(role.equals("administrador")||role.equals("docente")||role.equals("alumno")))
			  JOptionPane.showMessageDialog(null, "elija un rol");
		   else{ 
			 if(existeUsuario(dni,nombreUsuario)){ 
			   JOptionPane.showMessageDialog(null, "Ya existe un usuario con ese DNI o username, intente otro");
			  }
			  else {
				if(role.equals("alumno"))
					try {
						Alumno.getAlumnoByDNI(dni);
						User nuevo= new User(dniEntero,nombreUsuario,passwordUsuario,role);
						nuevo.save();
						view.resetCamposUsuario();
						JOptionPane.showMessageDialog(null, "Usuario insertado con exito");
					} catch (userNotFound e) {
						JOptionPane.showMessageDialog(null, "No existe un alumno con ese dni");
					}
					else
						if(role.equals("docente"))
							try {
								Docente.getDocenteByDNI(dni);
								User nuevo= new User(dniEntero,nombreUsuario,passwordUsuario,role);
								nuevo.save();
								view.resetCamposUsuario();
								JOptionPane.showMessageDialog(null, "Usuario insertado con exito");
							} catch (docenteNotFound e) {
								JOptionPane.showMessageDialog(null, "No existe un docente con ese dni");
							}
						else
						{
									if(role.equals("administrador"))	
									{
										User nuevo= new User(dniEntero,nombreUsuario,passwordUsuario,role);
										nuevo.save();
										view.resetCamposUsuario();
										JOptionPane.showMessageDialog(null, "Usuario insertado con exito");
									}
						}
			  }
			}
		 }
		 else {
		   dniModificar = "";
		   dniModificar = view.getIDUsuarioModificar();
		   passwordUsuario=view.getNuevoPasswordUsuario();
		   try {
			 User viejo=User.getUserByID(dniModificar);
			 User nuevo=new User(viejo.getCode(),viejo.getUsername(),passwordUsuario,viejo.getRole());
			 viejo.destroy();
			 nuevo.save();
			 JOptionPane.showMessageDialog(null, "Usuario modificado con exito");
			} 
		   catch (userNotFound e) {
		      JOptionPane.showMessageDialog(null, "No existe tal usuario");
		   }
		   view.resetCamposUsuario();
		}
 }
	
	
  public boolean existeUsuario(String dni,String username){
	boolean existeID = true;
	boolean existeUsername = true;
	try {	
	  User.getUserByID(dni);
	} 
	catch (userNotFound e) {
	  existeID = false;
	}
	try {	
	  User.getUserByUsername(username);
	} 
	catch (userNotFound e) {
	  existeUsername = false;
	}
	return (existeID || existeUsername);
  }	
		
  public void insertarUsuario(User usuario){	
    User nuevo=new User(dniEntero,nombreUsuario,passwordUsuario,role);
	nuevo.setCode(dniEntero);
	nuevo.save();
  }

}


